package com.atguigu.juc.study.chapter12.lightlock;

import org.openjdk.jol.info.ClassLayout;

import java.util.concurrent.TimeUnit;

/**
 * @author : leimingchao
 * @date Date : 2022年06月20日 21:58
 *
 *
 * -XX:+UseBiasedLocking  开启偏向锁(默认)
 * -XX:-UseBiasedLocking  关闭偏向锁，会跳级进入轻量级锁
 * -XX:BiasedLockingStartupDelay=0  关闭延时(演示偏向锁时需要开启)
 */
public class SynchronizedUpDemo4 {

    public static void main(String[] args) {

        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        Object object = new Object();

        System.out.println("本应该是偏向锁");
        System.out.println(ClassLayout.parseInstance(object).toPrintable());

        //没有重写hashCode()方法,一致性哈希，重写后无效，当一个对象已经计算过identity hash code，它就无法进入偏向锁状态
        object.hashCode();

        synchronized (object) {
            System.out.println("本应该是偏向锁，但是由于计算过一致性哈希，会直接升级为轻量级锁");
            System.out.println(ClassLayout.parseInstance(object).toPrintable());
        }
    }
}
